/*
 * Coordonnees.h
 *
 *  Created on: Jun 8, 2013
 *      Author: juliendubois
 */

#ifndef COORDONNEES_H_
#define COORDONNEES_H_

#include "Cardinalite.h"

using Cardinalite::Cardinalite_2D;
using Cardinalite::Cardinalite_3D;

struct Coordonnees {
	/**
	 * Attributs
	 */
	int x;
	int y;
	int z;

	/**
	 * Constructeurs
	 */
	Coordonnees(int x, int y, int z);
	Coordonnees(const Coordonnees & coord);

	/**
	 * Destructeur
	 */
	virtual ~Coordonnees();

	/**
	 * Accesseurs du voisin de la coordonnées de cardinalité données
	 */
	Coordonnees & getVoisin(Cardinalite_2D card) const;
	Coordonnees & getVoisin(Cardinalite_3D card) const;

	/**
	 * Opérateurs d'affectation
	 */
	Coordonnees & operator= (const Coordonnees & coord);
	Coordonnees & operator+= (const Coordonnees & coord);
	Coordonnees & operator-= (const Coordonnees & coord);

	/**
	 * Opérateurs
	 */
	Coordonnees & operator+ (const Coordonnees & coord) const;
	Coordonnees & operator- (const Coordonnees & coord) const;

	/**
	 * Opérateurs de comparaison
	 */
	bool operator== (const Coordonnees & coord) const;
	bool operator!= (const Coordonnees & coord) const;

	bool operator< (const Coordonnees & coord) const;
	bool operator<= (const Coordonnees & coord) const;
	bool operator> (const Coordonnees & coord) const;
	bool operator>= (const Coordonnees & coord) const;
};

#endif /* COORDONNEES_H_ */
